[Security Hub] ステータスの「成功」「失敗」「不明」となる条件をまとめてみた
はじめに
Security Hub のセキュリティ標準の結果のステータスには、 「成功」「失敗」「不明」の 3種類あります。
それぞれステータスを判断する基準を調べてみました。
ステータスの判断方法(公式ドキュメントより)
AWSドキュメントの文章から各ステータスの成立条件を引用します。
- 成功
- すべての検出結果において
Compliance.Status
がPASSED
であるか、Workflow.Status
がRESOLVED
であることを示します。Workflow.Status
がSUPPRESSED
である検出結果は無視されます。- 失敗
- 少なくとも 1 つの検出結果において
Compliance.Status
がFAILED
であり、Workflow.Status
がRESOLVED
でないことを示します。Workflow.Status
がSUPPRESSED
である検出結果は無視されます。- 不明 – 以下のいずれかが真であることを示します。
検出結果
はありません。- すべての検出結果において
Workflow.Status
がSUPPRESSED
です。SUPPRESSED
検出結果は無視されるため、これは検出結果がないのと同じです。FAILED
である検出結果はありません。少なくとも 1 つの検出結果においてCompliance.Status
がWARNING
またはNOT_AVAILABLE
であり、Workflow.Status
がRESOLVED
またはSUPPRESSED
ではありません。
- 検出結果
Workflow.Status
Compliance.Status
の 3要素でステータスを判断しています。 まずは、これら 3項目が何なのか簡単に説明します。
前提知識
検出結果とは
検出結果は Security Hub によるセキュリティチェックの結果です。
例えば [S3.2] S3 バケットはパブリック読み取りアクセスを禁止する必要があります
項目に対して、
下図に表示される情報、1行1行がそれぞれ検出結果です。
検出結果はそれぞれ AWS Security Finding 形式(ASFF) と呼ばれるJSON形式のデータで保存されます。 検出結果の [タイトル] → [Finding IDのリンク] と選択することで詳細の情報を見ることができます。
Workflow.Status
とは
検出結果の JSONにある "Workflow" 項目の "Status" 値
のことです。
※ "WorkflowState"値
ではないので注意
これは 検出結果の調査ステータス です。
検出結果に対して、「レビューを行ったか」「修正され、解決済みになったか」などのステータスを設定できます。 有効な値は下記のとおりです。
- NEW(新規) – レビュー前の検出結果の初期状態。
- NOTIFIED(通知済み) – セキュリティの問題についてリソース所有者に通知したことを示します。初回レビュー者がリソース所有者ではなく、リソース所有者の介入が必要な場合に使用されます。
- RESOLVED(解決済み) – この検出結果はレビューおよび修正され、現在は解決済みと見なされています。
- SUPPRESSED(抑制済み) – 検出結果はレビューされず、対処されません。
検出結果の [ワークフローのステータス] から変更が可能です。 この変更で CloudWatchイベントが飛ぶので、通知や他アクションなど連携が可能です。
Compliance.Status
とは
検出結果の JSONにある "Compliance" 項目の "Status" 値
のことです。
セキュリティチェックの結果 が入ります。
Compliance.Status
の種類は以下のとおり。
値 | 内容 |
---|---|
PASSED | チェックに合格 |
WARNING | 不足している情報がある or チェックをサポートしていない |
FAILED | 1つ以上のリソースがチェックに合格しなかった |
NOT\_AVAILABLE | サービス停止もしくはAPIエラーにより、チェックを実行できなかった |
ステータスの判断方法(改めて)
それぞれステータスの判断方法を説明する前に、
検出結果の Workflow.State
, Compliance.State
の組み合わせ、
それに対する扱いを以下表にまとめます。
要点は以下です。
Workflow.State
がNEW or NOTIFIED
のときは、検出結果の扱いはCompliance.Status
に依存します。PASSED
→ "OK"FAILED
→ "NG"WARNING or NOT_AVAILABLE
→ "その他"
Workflow.State
がRESOLVED
のときは、検出結果は必ず "OK" 扱いですWorkflow.State
がSUPPRESSED
のときは、検出結果は必ず "無視" 扱いです
「成功」になるケース
検出結果が 「1個以上 "OK"」「0個以上 "無視"」 で構成されていれば「成功」です。
以下に例を載せます。
- 1つめは全て セキュリティチェックに合格
PASSED
した例です。 - 2つめはセキュリティチェックに不合格
FAILED
したリソースがありますが、 例外登録として抑制SUPPRESSED
したため、 "無視" 扱い。 他の検出結果はすべて合格PASSED
しているため「成功」となります。
「失敗」になるケース
検出結果が 「1個以上 "NG"」 であれば「失敗」です。
以下に例を載せます。
1個以上 赤色 "NG" が合った場合、他の "OK/その他/無視" に関わらず「失敗」となります。
「不明」になるケース
「成功」「失敗」に当てはまらない ものがステータス「不明」になります。
▼検出結果が無い
▼すべての検出結果が抑制済み
SUPPRESSED
の検出結果は無視されます。そのため「検出結果が無い」状態と同義になります。
▼ 「"NG" が 0個」かつ 「"その他" が 1個以上」
FAILED
である検出結果はありません。少なくとも 1 つの検出結果においてCompliance.Status
がWARNING
またはNOT_AVAILABLE
であり、Workflow.Status
がRESOLVED
またはSUPPRESSED
ではありません。
上記を噛み砕くと 「"NG" が 0個」かつ 「"その他" が 1個以上」
になります。
ステータス「不明」の解決方法
Compliance.Status
が WARNING or NOT_AVAILABLE
となるケースが多いです。
その場合 検出結果の JSONから Compliance.StatusReasons を参照して理由を知りましょう
例えば [CIS.2.3] CloudTrail ログを保存するためのS3バケットが公開設定になっていないか
のチェックが
ステータス「不明」 となるケースがありました。
そのときの 検出結果のJSONを見てみると以下のような記述があります。
"Compliance": { "Status": "WARNING", "StatusReasons": [ { "ReasonCode": "S3_BUCKET_CROSS_ACCOUNT_CROSS_REGION", "Description": "The finding is in a WARNING state, because the S3 Bucket associated with this rule is in a different region/account. This rule does not support cross-region/cross-account checks, so it is recommended to disable this control in this region/account and only run it in the region/account where the resource is located." } ] }
なぜ WARNING
になったか、理由が記述されていますね。
「クロスアカウント、クロスリージョンのチェックはサポートしていない」ことが理由でした。
どう対応するか、検討しましょう。
場合によっては Workflow.State
を SUPPRESSED
として無視することでスッキリすることがあります。
※誤って Workflow.State
を SUPPRESSED
にしてしまい戻したい場合は、
検出結果から検索、ワークフローステータスの変更で状態を戻せます。
おわりに
Security Hubのステータス「成功」「失敗」「不明」の条件をまとめてみました。 セキュリティ標準の各チェックのステータスを正しく把握して、 スコアを上げていきましょう。
少しでもどなたかのお役に立てば幸いです。